package com.leet.code.lcof;

public class Code20 {

    public static void main(String[] args) {
        System.out.println(new Code20().isNumber("+.8"));
    }

    public boolean isNumber(String s) {

        if (s == null || s.length() == 0) {
            return false;
        }

        s = s.trim();

        int i = 0;

        if (i == s.length()) {
            return false;
        }
        char c = s.charAt(i);
        boolean nextE = true;//下一位可以是Ee
        boolean nextD = true;//下一位可以是.
        if (c == '+' || c == '-') {
            i++;
            if (i == s.length()) {
                return false;
            }
            c = s.charAt(i);
        }

        if (c == '.') {
            i++;
            nextD = false;
            if (i == s.length()) {
                return false;
            }
            c = s.charAt(i);
        }


        if (c < '0' || c > '9') {
            return false;
        }


        for (; i < s.length(); i++) {
            c = s.charAt(i);
            if (c >= '0' && c <= '9') {
            } else if (c == '.') {
                if (nextD) {
                    nextD = false;
                } else {
                    return false;
                }
            } else if (c == 'E' || c == 'e') {
                if (nextE) {
                    nextE = false;
                    i++;
                    if (i == s.length()) {
                        return false;
                    }
                    c = s.charAt(i);
                    if (c == '+' || c == '-') {
                        i++;
                        if (i == s.length()) {
                            return false;
                        }
                        c = s.charAt(i);
                    }

                    if (c < '0' || c > '9') {
                        return false;
                    }

                } else {
                    return false;
                }
//                nextZZ = false;
                nextD = false;
            } else {
                return false;
            }

        }

        return true;

    }

}
